La precedencia de un operador indica qué tan "cerca" se agrupan dos expresiones. Por ejemplo, en la expresión 1 + 5 * 3, la respuesta es 16 y no 18, ya que el operador de multiplicación ("*") tiene una mayor precedencia que el operador de adición ("+"). Los paréntesis pueden ser usados para marcar la precedencia, si resulta necesario. Por ejemplo: (1 + 5) * 3 evalúa a 18. Si la precedencia de los operadores es la misma, se utiliza una asociación de izquierda a derecha.
La siguiente tabla lista la precedencia de los operadores, con aquellos de mayor precedencia listados al comienzo de la tabla. Los operadores en la misma línea tienen la misma precedencia, en cuyo caso su asociatividad decide el orden para evaluarlos.
| Asociatividad | Operadores | Información Adicional |
|---|---|---|
| no-asociativo | clone new | clone y new |
| izquierda | [ | array() |
| no-asociativos | ++ -- | incremento/decremento |
| no-asociativos | ~ - (int) (float) (string) (array) (object) (bool) @ | tipos |
| no-asociativos | instanceof | tipos |
| derecha | ! | lógicos |
| izquierda | * / % | aritmética |
| izquierda | + - . | aritmética, y cadena |
| izquierda | << >> | manejo de bits |
| no-asociativos | < <= > >= <> | comparación |
| no-asociativos | == != === !== | comparación |
| izquierda | & | manejo de bits, y referencias |
| izquierda | ^ | manejo de bits |
| izquierda | | | manejo de bits |
| izquierda | && | lógicos |
| izquierda | || | lógicos |
| izquierda | ? : | ternario |
| derecha | = += -= *= /= .= %= &= |= ^= <<= >>= | asignación |
| izquierda | and | lógicos |
| izquierda | xor | lógicos |
| izquierda | or | lógicos |
| izquierda | , | varios usos |
La asociatividad de izquierda quiere decir que la expresión es evaluada desde la izquierda a la derecha, la asociatividad de derecha quiere decir lo contrario.
Example #1 Asociatividad
<?php
$a = 3 * 3 % 5; // (3 * 3) % 5 = 4
$a = true ? 0 : true ? 1 : 2; // (true ? 0 : true) ? 1 : 2 = 2
$a = 1;
$b = 2;
$a = $b += 3; // $a = ($b += 3) -> $a = 5, $b = 5
?>
Use paréntesis para incrementar la legibilidad del código.
Note: Aunque = tiene una menor precedencia que la mayoría de los demás operadores, PHP aun permite expresiones similares a la siguiente: if (!$a = foo()), en cuyo caso el valor de retorno de foo() va a dar a $a.